﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Spring.Context;
using Spring.Context.Support;
using ProyectoGrupo5.Negocio;
using ProyectoGrupo5.ClasesDominio;

namespace ProyectoGrupo5.Pruebas
{
    [TestFixture]
    public class TestBolsaTrabajo
    {
        private IApplicationContext contexto = null;

        [TestFixtureSetUp]
        public void InicializarSpring()
        {
            this.contexto = new XmlApplicationContext(
                "assembly://ProyectoGrupo5/ProyectoGrupo5/capaNegocio.xml",
                "assembly://ProyectoGrupo5/ProyectoGrupo5/capaPersistencia.xml");
        }

        [Test]
        public void TestCrearOfertanteCorrectamente()
        {
            BolsaTrabajo ofertanteService = (BolsaTrabajo)this.contexto.GetObject("bolsaTrabajo");
            Assert.NotNull(ofertanteService);
            Ofertante nuevoOfertante = new Ofertante();
            nuevoOfertante.CodigoOfertante = 3;
            nuevoOfertante.RazonSocial     = "Saga Fallabella";
            nuevoOfertante.Ruc             = "1234567890A";
            nuevoOfertante.Correo          = "ofertas@fallabella.com";
            nuevoOfertante.Contrasena      = "564087f";
            try
            {
                nuevoOfertante = ofertanteService.CrearOfertante(nuevoOfertante);
            }
            catch (Exception e)
            {
                Assert.Fail(string.Format("Excepción: {0}", e.Message));
            }
            Assert.NotNull(nuevoOfertante);
            Assert.Greater(nuevoOfertante.CodigoOfertante, 0);
        }

        [Test]
        public void TestCrearAvisoCorrectamente()
        {
            BolsaTrabajo avisoService = (BolsaTrabajo)this.contexto.GetObject("bolsaTrabajo");
            Assert.NotNull(avisoService);
            Aviso nuevoAviso = new Aviso();
            Ofertante ofertante = new Ofertante();
            nuevoAviso.Ofertante = ofertante;
            nuevoAviso.CodigoAviso = 2;
            nuevoAviso.Titulo                    = "Administrador de Red";
            nuevoAviso.FechaInicio               = Convert.ToDateTime("08/06/2011");
            nuevoAviso.DescripcionEmpresa        = "Empresa dedicada al rubro textil";
            nuevoAviso.DescripcionPuesto         = "Administrador de Red";
            nuevoAviso.Ofertante.CodigoOfertante = 3;
            nuevoAviso.FechaFin                  = Convert.ToDateTime("30/06/2011");
            try
            {
                nuevoAviso = avisoService.CrearAviso(nuevoAviso);
            }
            catch (Exception e)
            {
                Assert.Fail(string.Format("Excepción: {0}", e.Message));
            }
            Assert.NotNull(nuevoAviso);
            Assert.Greater(nuevoAviso.CodigoAviso, 0);
        }

        [Test]
        public void TestRealizarCandidaturaCorrectamente()
        {
            BolsaTrabajo candidaturaService = (BolsaTrabajo)this.contexto.GetObject("bolsaTrabajo");
            Assert.NotNull(candidaturaService);
            Candidato candidaturaRealizada = null;
            //Assert.DoesNotThrow(delegate
            //{
            //   candidaturaRealizada = candidaturaService.RealizarPostulacion(1, 1, 2);
            //});
            //Assert.Fail("Se lanzo una excepcion");
            try
            {
               candidaturaRealizada = candidaturaService.RealizarPostulacion(1, 1, 2);
           }
            catch (Exception e)
            {
                Assert.Fail(string.Format("Excepción: {0}", e.Message));
           }
           Assert.NotNull(candidaturaRealizada);
           Assert.Greater(candidaturaRealizada.CodigoCandidato, 0);
        }
    }
}
